package com.kool.kadmin.system.api;

import com.kool.kadmin.system.api.vo.CounterVo;
import com.kool.kadmin.system.api.vo.UserVo;
import com.kool.kadmin.system.vo.ParamVo;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * @author luyu
 */
@Component
public interface SystemApi {
    /**
     * 获取计数器下一个值
     *
     * @param cntCode
     * @return
     */
    String getCntNextValue(String cntCode);

    /**
     * 通知前端
     *
     * @param content
     * @param sender
     * @param receiver
     */
    void notifyInfo(String content, Long sender, Long receiver);

    /**
     * 根据参数码获取参数
     *
     * @param code
     * @return
     */
    ParamVo getParam(String code);

    /**
     * 查询父参数下所有子参数
     *
     * @param fatherCode
     * @return
     */
    List<ParamVo> getSubParams(String fatherCode);

    /**
     * 查询父参数下的key对应子参数
     *
     * @param fatherCode
     * @param key
     * @return
     */
    ParamVo getSubParam(String fatherCode, String key);

    /**
     * 更新子参数值
     *
     * @param fatherCode
     * @param key
     * @param value
     */
    void updateSubValue(String fatherCode, String key, String value);

    /**
     * 增加参数
     *
     * @param paramVo
     */
    void addParam(ParamVo paramVo);

    /**
     * 更新参数值
     *
     * @param code
     * @param value
     */
    void updateValue(String code, String value);

    /**
     * 删除参数
     *
     * @param paramCode
     */
    void deleteParam(String paramCode);

    /**
     * 查询所有用户
     *
     * @return
     */
    List<UserVo> getAllUsers();

    /**
     * 查询用户详情
     *
     * @return
     */
    UserVo getUserById(Long id);

    /**
     * 根据用户姓名查询用户信息
     *
     * @param userName
     * @return
     */
    UserVo getUserByName(String userName);

    /**
     * 初始化计数器
     * 如果计数器已存在则不插入，返回false；如果计数器不存在，则插入
     *
     * @param counterVo
     * @return
     */
    boolean initCounter(CounterVo counterVo);
}
